home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / exampleCode / smoke / uLinMath.h < prev    next >
C/C++ Source or Header  |  1994-08-01  |  4KB  |  140 lines

  1. /* uLinMath.h */
  2. #ifndef _ULINMATH_H_
  3. #define _ULINMATH_H_ 1
  4. /*
  5.  * Copyright (c) 1993, 1994, Silicon Graphics, Inc.
  6.  *
  7.  * Permission to use, copy, modify, distribute, and sell this software
  8.  * and its documentation for any purpose is hereby granted without
  9.  * fee, provided that (i) the above copyright notices and this
  10.  * permission notice appear in all copies of the software and related
  11.  * documentation, and (ii) the name of Silicon Graphics may not be
  12.  * used in any advertising or publicity relating to the software
  13.  * without the specific, prior written permission of Silicon Graphics.
  14.  * 
  15.  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
  16.  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
  17.  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
  18.  * 
  19.  * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL,
  20.  * INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY
  21.  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  22.  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY
  23.  * THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE
  24.  * OR PERFORMANCE OF THIS SOFTWARE.
  25.  * 
  26.  */
  27.  
  28. #include "uSmoke.h"
  29.  
  30. #define FloatIsNonZero(f) ((f<1.0e-37)?0:1)
  31.  
  32. #define uMAX(a,b) (a < b)?b:a
  33. #define uMIN(a,b) (a > b)?b:a
  34.  
  35. #define uABSlt(a,b) ((a)<(b) && -(a)<(b))
  36.  
  37. #define uCopyVec2(d,s) d[0]=s[0]; d[1]=s[1]
  38.  
  39. #define uCopyVec3(d,s) d[0]=s[0]; d[1]=s[1]; d[2]=s[2]
  40.  
  41. #define uCopyVec4(d,s) (d)[0]=(s)[0]; (d)[1]=(s)[1]; (d)[2]=(s)[2]; (d)[3]=(s)[3]
  42.  
  43. #define uSetVec2(d,x,y) d[0]=(x); d[1]=(y)
  44.  
  45. #define uSetVec3(d,x,y,z) d[0]=(x); d[1]=(y); d[2]=(z)
  46.  
  47. #define uSetVec4(d,x,y,z,w) d[0]=(x); d[1]=(y); d[2]=(z); d[3]=(w)
  48.  
  49. #define uAddVec3(d,v1,v2) d[0]=v1[0]+v2[0];d[1]=v1[1]+v2[1];d[2]=v1[2]+v2[2]
  50.  
  51. #define uSubVec3(d,v1,v2) d[0]=v1[0]-v2[0];d[1]=v1[1]-v2[1];d[2]=v1[2]-v2[2]
  52.  
  53. #define uScaleVec3(d,_s,v) d[0]=(_s)*v[0]; d[1]=(_s)*v[1]; d[2]=(_s)*v[2]
  54.  
  55. #define uAddScaledVec3(d,v1,_s,v2) \
  56. d[0]=v1[0]+(_s)*v2[0];d[1]=v1[1]+(_s)*v2[1];d[2]=v1[2]+(_s)*v2[2]
  57.  
  58. #define uDotVec3(v1,v2) (v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2])
  59.  
  60. #define uLengthVec3(v) sqrtf(uDotVec3(v,v))
  61.  
  62. #define uMakeTransMat(_dst, _x, _y, _z) \
  63.    (_dst)[0][0] = 1; \
  64.    (_dst)[0][1] = 0; \
  65.    (_dst)[0][2] = 0; \
  66.    (_dst)[0][3] = 0; \
  67.    (_dst)[1][0] = 0; \
  68.    (_dst)[1][1] = 1; \
  69.    (_dst)[1][2] = 0; \
  70.    (_dst)[1][3] = 0; \
  71.    (_dst)[2][0] = 0; \
  72.    (_dst)[2][1] = 0; \
  73.    (_dst)[2][2] = 1; \
  74.    (_dst)[2][3] = 0; \
  75.    (_dst)[3][0] = (_x); \
  76.    (_dst)[3][1] = (_y); \
  77.    (_dst)[3][2] = (_z); \
  78.    (_dst)[3][3] = 1;
  79.  
  80.  
  81. #define uMakeScaleMat(_dst, _s1, _s2, _s3) \
  82.    (_dst)[0][0] = (_s1); \
  83.    (_dst)[0][1] = 0; \
  84.    (_dst)[0][2] = 0; \
  85.    (_dst)[0][3] = 0; \
  86.    (_dst)[1][0] = 0; \
  87.    (_dst)[1][1] = (_s2); \
  88.    (_dst)[1][2] = 0; \
  89.    (_dst)[1][3] = 0; \
  90.    (_dst)[2][0] = 0; \
  91.    (_dst)[2][1] = 0; \
  92.    (_dst)[2][2] = (_s3); \
  93.    (_dst)[2][3] = 0; \
  94.    (_dst)[3][0] = 0; \
  95.    (_dst)[3][1] = 0; \
  96.    (_dst)[3][2] = 0; \
  97.    (_dst)[3][3] = 1; 
  98.  
  99. #define uSetMatRowVec3(_m, _r, _v) \
  100.     (_m)[(_r)][0] = (_v)[0]; \
  101.     (_m)[(_r)][1] = (_v)[1]; \
  102.     (_m)[(_r)][2] = (_v)[2]; 
  103.  
  104. /* m = I */
  105. #define uMakeIdentMat(m)\
  106.     m[0][0] = 1.0f;\
  107.     m[0][1] = 0.0f;\
  108.     m[0][2] = 0.0f;\
  109.     m[0][3] = 0.0f;\
  110.     m[1][0] = 0.0f;\
  111.     m[1][1] = 1.0f;\
  112.     m[1][2] = 0.0f;\
  113.     m[1][3] = 0.0f;\
  114.     m[2][0] = 0.0f;\
  115.     m[2][1] = 0.0f;\
  116.     m[2][2] = 1.0f;\
  117.     m[2][3] = 0.0f;\
  118.     m[3][0] = 0.0f;\
  119.     m[3][1] = 0.0f;\
  120.     m[3][2] = 0.0f;\
  121.     m[3][3] = 1.0f;
  122.  
  123.  
  124. #define _SQUARE(a) ((a)*(a))
  125.  
  126. #define _ETA 1.0e-5f
  127. #define _HUGEVAL 3.40282347e+37f
  128.  
  129. float uNormalizeVec3(uVec3 vec);
  130. void  uCrossVec3(uVec3 dst, const uVec3 v1, const uVec3 v2);
  131. void  uXformVec3(uVec3 dst, const uVec3 v, const uMatrix m);
  132. void  uTransposeMat(uMatrix dst, const uMatrix m);
  133. void  uSinCos(float d,float *s, float *c);
  134. void  uMakeRotMat(uMatrix m, float degrees, float x, float y, float z);
  135. void  uPostMultMat(uMatrix dst, const uMatrix m);
  136. void  uMakeRotOntoMat(uMatrix m, const uVec3 v1, const uVec3 v2);
  137. void  uXformPt3(uVec3 dst, const uVec3 v, const uMatrix m);
  138.  
  139. #endif /* _ULINMATH_H_ */
  140.